package com.xbongbong.paas.pojo.dto;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.helper.PageHelper;
import com.xbongbong.paas.toolbox.util.DateUtil;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.pro.enums.errorcodes.SystemErrorCodeEnum;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author youli.chen
 * @version v1.0
 * @description: 通话记录列表入参
 * @date 2019/2/19 19:39
 * @since v1.0
 */
@Setter
@Getter
@ToString
public class CallCallLogListDTO extends BaseDTO {

    private static final Integer DEFAULT_OPERATE_LOG_PAGE_SIZE = PageHelper.PAGE_SIZE;

    /**
     * 话务中心平台，参考CallCenterTypeEnum
     */
    @NotNull(message = "{dto.msg.callCallLogList.moduleType.NotNull}")
    private Integer moduleType;

    /**
     * 分页当前页
     */
    private Integer page;

    /**
     * 分页每页记录数
     */
    private Integer pageSize;

    /**
     * 团队ID
     */
    private Long depId;
    /**
     * 所属团队编号
     */
    private String teamId;
    /**
     * 查询的用户ID
     */
    private String agentUserId;
    /**
     * 对象id saas的refId变成dataId
     */
    private Integer dataId;
    /**
     * 对象类型，参考 XbbRefTypeEnum
     */
    private Integer businessType;
    /**
     * 通话类型，0: 呼入（度言：INBOUND）；1：呼出（度言：OUTBOUND）
     */
    private Integer type;
    /**
     * 通话结果，1: 成功；0：失败（度言字段 outcome 呼叫结果，SUCCESS: 成功；FAIL：失败）；2：需要同步
     */
    private Integer result;
    /**
     * 姓名或号码的模糊查询
     */
    private String fuzzySearch;
    /**
     * 呼叫号码
     */
    private String target;
    /**
     * 录音是否已经翻译成功
     */
    private Boolean audioTranslated;
    /**
     * 电话类型
     */
    private Long codeId;
    /**
     * 通话时长（筛选开始区间）
     */
    private Integer durationStart;
    /**
     * 通话时长（筛选结束区间）
     */
    private Integer durationEnd;

    /**
     * 用于查询一段时间段内通话记录，开始时间和结束时间的字符串，起止时间不超过1个月（例：2017-11-13,2017-11-16)
     */
    private List<String> dateRange;
    /**
     * 用于查询一段时间段内通话记录，开始时间的时间戳，起止时间不超过1个月，单位：秒
     */
    private Integer startTime;
    /**
     * 用于查询一段时间段内通话记录，结束时间的时间戳，起止时间不超过1个月，单位：秒
     */
    private Integer endTime;

    /**
     * 通话记录来源 0-呼叫中心 1-阿里云呼
     * @see com.xbongbong.saas.enums.CallCenterCallLogCallSourceEnum
     */
    private Integer callSource;

    /**
     * 表单id
     */
    private Long formId;

    public CallCallLogListDTO() {
        page = 1;
        pageSize = DEFAULT_OPERATE_LOG_PAGE_SIZE;
    }

    /**
     * 解析前端 Element UI 时间选择空间传来的时间
     *
     * @throws XbbException 数据异常
     * @author 章华隽
     * 创建时间：2018/3/29 下午4:39
     * 修改时间：
     * @version 3.20
     * @since 3.20
     */
    public void initQueryTimeRange() throws XbbException {
        Integer start = null, end = null;
        if (dateRange != null && dateRange.size() != 0) {
            int elementUIDateLength = 2;
            if (dateRange.size() != elementUIDateLength) {
                throw new XbbException(SystemErrorCodeEnum.API_ERROR_100018, "筛选时间选择错误");
            }
            // 传了查询时间
            start = DateUtil.getInt(dateRange.get(0), DateUtil.SDFDate);
            int daySeconds = 86400;
            end = DateUtil.getInt(dateRange.get(1), DateUtil.SDFDate) + daySeconds;
        }
        this.setStartTime(start);
        this.setEndTime(end);
    }
}
